home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
MCASM.RAR
/
MC_ASM.EXE
/
WROX_ASM
/
CH9
/
PROTECT
/
CHECK.ASM
next >
Wrap
Assembly Source File
|
1994-05-24
|
3KB
|
157 lines
dosseg
.model small
.stack 100h
.data
DPT db 11 dup(?)
MyName db 'Written by Kiselyov J.V. & Malakhov K.A., Inc. ',0
db 256-48 dup (0)
Prg db 'protect_dsk',10
db 256-12 dup (0)
Version db 'Version 1.0',0
db 256-12 dup (0)
bootsec dw 256 dup (?)
buffdisk db 256 dup (?)
oldint1eh dd ?
drive db 0
new_sectsize db 1
boot_tracks db ?
messerr db 'Error reading',10,13,'$'
messerr1 db 'This disk is not a keydisk !',10,13,'$'
messerr2 db 'Error reading track','$'
messok db 'Everything went Ok.',10,13,'$'
.code
mov ax,@data
mov ds,ax
mov es,ax
; Reset controller
xor ah,ah
int 13h
; Read BOOT sector
lea bx,bootsec
mov ax,0201h
mov dl,drive
xor dh,dh
mov cx,1
int 13h
jnc @@pass_010
lea dx,messerr
jmp @@pass_err1
; Store some parameters of disk
@@pass_010:
mov ax,word ptr es:[bx+13h]
mov cx,word ptr es:[bx+18h]
xor dx,dx
div cx
mov cx,word ptr es:[bx+1ah]
xor dx,dx
div cx
mov boot_tracks,al
; Get address of disk parameter table
mov ax,351eh
int 21h
; Store old int 1eh address
push ds
push ds
mov ax,es
mov word ptr oldint1eh+2,ax
mov word ptr oldint1eh,bx
; Copy DPT to the buffer DPT
mov ds,ax
pop es
mov si,bx
lea di,DPT
mov cx,11
rep movsb
pop ds
; Modify "sector size" field
lea di,DPT
mov al,new_sectsize
mov byte ptr es:[di+3],al
; Set new DPT
lea dx,DPT
mov ax,251eh
int 21h
; Compare passcode
lea bx,buffdisk
mov cl,01h
call ReadDisk
jnc no_err2
lea dx,messerr2
jmp exitprg
no_err2:
lea si,buffdisk
lea di,MyName
mov cx,48
repe cmpsb
je go_ok2
lea dx,messerr1
jmp exitprg
go_ok2:
lea bx,buffdisk
mov cl,02h
call ReadDisk
jnc no_err3
lea dx,messerr2
jmp exitprg
no_err3:
lea si,buffdisk
lea di,Prg
mov cx,12
repe cmpsb
je go_ok3
lea dx,messerr1
jmp exitprg
go_ok3:
lea bx,buffdisk
mov cl,03h
call ReadDisk
jnc no_err4
lea dx,messerr2
jmp exitprg
no_err4:
lea si,buffdisk
lea di,Version
mov cx,12
repe cmpsb
je go_ok4
lea dx,messerr1
jmp exitprg
go_ok4:
lea dx,messok
exitprg:
mov ah,9
int 21h
; Restore previous DPT
mov ax,word ptr oldint1eh+2
mov dx,word ptr oldint1eh
mov ds,ax
mov ax,251eh
int 21h
exitprg1:
mov ax,4c00h
int 21h
@@pass_err1: mov ah,9
int 21h
mov ax,4c01h
int 21h
; Read
ReadDisk proc near
mov AH,02h
mov AL,01h
mov CH,boot_tracks
mov DL,drive
xor dh,dh
int 13h
ret
ReadDisk endp
end